文章同步發表至 Medium
前幾篇簡單講解了幾個套件對 Shapefile 的操作之後,接下來要進入到 Shapefile 的實作了。第一個練習,我們要使用的是政府資料開放平臺中,休閒旅遊分類裡面所提供的資料,包含景點、民宿旅館、餐飲、活動四個部分,以及鄉鎮市區界線,來做出一個簡單的網頁,可以利用縣市鄉鎮搜尋對應的景點、查詢景點附近的住宿和餐廳等等。由於我擅長的並不是前端,所以文章內容會比較多著墨在後端和資料庫的處理上。
我們現有的資料來源都是實體檔案,如果每發送一次 API 就要讀取一次檔案是一個很不實用的作法,除了速度較慢之外,還有可能造成檔案被其他個 request 咬住。因此,我提供的解決辦法是寫一個 Console App,把檔案的內容存到資料庫,如果有需要的話也能調整成排程,彈性較大。
以下是將匯入資料這支 Console App 會需要用到的套件清單,如果有遇到其他問題,也有可能是套件更新過,可以先試著把版本調降看看。
套件名稱 | 版本 | 說明 |
---|---|---|
EntityFrameworkCore | 6.0.8 | 使用 EF Core 來操作資料庫 |
EntityFrameworkCore.Design | 6.0.8 | 使用 EF Core DB First 模式時需要用到 |
Npgsql.EntityFrameworkCore.PostgreSQL | 6.0.6 | PostgreSQL EF Core 的套件 |
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite | 6.0.6 | 可以接 Geometry 欄位的資料 |
NetTopologySuite.Features | 2.1.0 | 讀取檔案時使用 |
還記得我們之前所說的座標系統嗎?PostgreSQL 裡面可以存 Geometry 的格式,自然也就會存到座標系統的值。因此,在我們把檔案放入資料庫之前,先檢查一下五個檔案的座標格式。
前端套件會選用 Leaflet,工作上也都是接觸這個套件,而他在官方文件中的範例,底圖都是 OSM OpenStreeMap,所以需要先研究一下 OSM 所使用的座標系統是甚麼。
而根據這篇文章的說明:
EPSG:4326
:大地基準EPSG:3857
:以 WGS84 大地基準為底的投影座標系統因為是平面的地圖所以必須經過投影,因此 OSM 使用的是 EPSG:3857
,但根據 3857 的數值較大,所佔用的儲存空間也是,所以基本上會存 4326,再轉換成 3857 進行操作。
不過從這篇文章的回答中可以看出,Leaflet 很貼心的會幫你做轉換,預設只要輸入經緯度座標即可,所以下載回來的檔案都不需要進行座標轉換喔。